package com.empsys.old.aspects;

import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * @author wzm
 * @create 2023-12-16 14:46
 * project_name:web2310
 * @Description
 */
//测试切入点表达式
/*@Aspect
@Component*/
public class PointCutExpress {
    /*
    * 切入点表达式的语法：
    * 表达形式有两种：
    * 1.字符串形式
    *  execution([访问修饰符] 返回值类型 包名.类名.[方法名](方法参数类型) [throws 抛出的异常])
    * []一般表示可以省略  根据情况使用 方法名如果需要使用不建议省略
    * 如:匹配根据id删除部门的方法的全路径匹配
    * public void delete(Integer id)
    * @Around("execution(public void com.empsys.service.impl.DeptServiceImpl.delete(*) throws Exception)")
    * 注意：此时为了匹配多个方法的通用会使用一些通配符
    *  ---- * 单独任意字符，任意返回值、包名、方法名、类名、类型
    *  ---- .. 多个连续的任意字符，任意多级包、任意个数类型、任意个数参数
    *
    *
    *
    *
    * 2.注解形式  通过方法上的注解来匹配执行的方法
    * 语法：
    * @Around("@antnoation(自定义注解全类名)")
    * 说明：此时哪个方法加上了自定义注解就会被增强
    *
    *步骤：
    * 定义自定义注解
    * 在需要增强的方法上加上定义好的注解
    * 在增强或通知上指定注解
    *
    *
    *
    * */

    //比较完整写法 完全指定
//    @Around("execution(public void com.empsys.service.impl.DepetServiceImpl.delete(*))")

    //省略修饰符 删除
   // @Around("execution(void com.empsys.service.impl.DepetServiceImpl.delete(*))")

   //用*代替返回值类型  任意返回值
    //@Around("execution(* com.empsys.service.impl.DepetServiceImpl.delete(java.lang.Integer))")

    //用*代替包名  任意包名 一层包一个*
    //@Around("execution(* com.*.*.*.DepetServiceImpl.delete(java.lang.Integer))")

    //用..代替多级包  任意多级包
   // @Around("execution(* com..DepetServiceImpl.delete(java.lang.Integer))")

    //*号代替任意类名
    //@Around("execution(* com..*.delete(java.lang.Integer))")

    //*代替任意方法
//    @Around("execution(* com..*.*(java.lang.Integer))")


 // 用*代替一个参数
//    @Around("execution(* com..*.*(*))")
//    @Around("execution(* com..DepetServiceImpl.delete(*))")


    //用..代替任意多个参数
   // @Around("execution(* com..*.*(..))")
   // @Around("execution(* com..DepetServiceImpl.delete(..))")

    //表达式要求 匹配 当前项目下 DeptServiceImpl下的任意参数的list方法或EmpServiceImpl下的任意参数的delete方法
   // @Around("execution(* com..DeptServiceimpl.list(..)) || execution(* com..EmpserviceImpl.delete(..))")

    //想要为某些字母开头的方法加上增强  为select开头的加上增强
    @Around("execution(* com..*.select*(..))")   //建议大家在定义方法是一定要有规律 获的都叫getXXX   查询selectxxx findXXX removeXXX
    public Object around(){
        return null;
    }
}
